<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>对象的深浅拷贝</title>
</head>
<body>
<script>
    let obj = {
        a:10,
        b:[1,2,3,4,5],
        c:{
            abc:'999'
        },
        d:/^\d+$/,
        e:new Date()
    }

    // Object.assign() 方法用于将所有可枚举属性的值从一个或多个
    // 源对象分配到目标对象。它将返回目标对象。(但是这样的方式当属性是一个对象时就不起作用了)
    let newObj = Object.assign({},obj)
    newObj.c.abc = 888
    console.log(newObj.c.abc)
    console.log(obj.c.abc)

    // JSON.parse(JSON.stringify(obj))不能对函数、正则、时间对象、数字对象的时候会不好用
    // let newObj = JSON.parse(JSON.stringify(obj))

    /*不直接创建空对象的目的:克隆的结果和之前保持相同的所属类
    function deepClone(obj){// 定义深克隆的方法
        // 过滤掉特殊的情况
        if(obj === null) return null
        if(typeof obj !== "Object") return obj
        if(obj instanceof RegExp) return new RegExp(obj)
        if(obj instanceof Date) return new Date(obj)

    }

    let newObj = new obj.constructor
    for(let key in obj){// 遍历对象中所有的键
       if(obj.hasOwnProperty(key)){// hasOwnProperty(对象的键) 返回布尔值
           newObj[key] = deepClone(obj[key])
       }
    }
     console.log('拷贝之后的对象',newObj)*/
</script>
</body>
</html>
